package com.example.cartservice.utils;

/**
 * 当前线程用户ID持有者
 * 使用ThreadLocal存储当前请求的用户ID
 * 确保线程安全的数据传递
 *
 * @author czwa
 */
public class CurrentHoler {
    /**
     * 线程局部变量，存储当前线程的用户ID
     * 每个使用该变量的线程都有自己独立的副本
     */
    private static final ThreadLocal<Integer> CURRENT_LOCAL = new ThreadLocal<>();

    /**
     * 设置当前线程的用户ID
     *
     * @param id 用户ID
     */
    public static void set(Integer id) {
        CURRENT_LOCAL.set(id);
    }

    /**
     * 获取当前线程的用户ID
     *
     * @return 用户ID，如果未设置则返回null
     */
    public static Integer getCurrentId() {
        return CURRENT_LOCAL.get();
    }

    /**
     * 清除当前线程的用户ID
     * 必须在请求处理完成后调用，防止内存泄漏和数据污染
     */
    public static void remove() {
        CURRENT_LOCAL.remove();
    }
}